home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Include / dxva.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-09-27  |  52.0 KB  |  1,430 lines

  1. //------------------------------------------------------------------------------
  2. // File: DXVA.h
  3. //
  4. // Desc: DirectX Video Acceleration header file.
  5. //
  6. // Copyright (c) 1999 - 2002, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __DIRECTX_VA__
  11. #define __DIRECTX_VA__
  12.  
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16.  
  17. #ifdef __DIRECTX_VA_COPP_ONLY
  18. #define __DIRECTX_VA_DECODER__
  19. #define __DIRECTX_VA_PROCAMPCONTROL__
  20. #define __DIRECTX_VA_DEINTERLACE__
  21. #endif
  22.  
  23. #ifndef DXVABit
  24. #define DXVABit(__x) (1 << __x)
  25. #endif
  26.  
  27. // -------------------------------------------------------------------------
  28. //
  29. // The definitions that follow describe the DirectX Video Acceleration
  30. // decoding interface.
  31. // This interface is accessable via the IAMVideoAccelerator interface.
  32. //
  33. // -------------------------------------------------------------------------
  34. //
  35. #ifndef __DIRECTX_VA_DECODER__
  36. #define __DIRECTX_VA_DECODER__
  37.  
  38. DEFINE_GUID(DXVA_ModeNone,    0x1b81be00, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  39. DEFINE_GUID(DXVA_ModeH261_A,  0x1b81be01, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  40. DEFINE_GUID(DXVA_ModeH261_B,  0x1b81be02, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  41.  
  42. DEFINE_GUID(DXVA_ModeH263_A,  0x1b81be03, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  43. DEFINE_GUID(DXVA_ModeH263_B,  0x1b81be04, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  44. DEFINE_GUID(DXVA_ModeH263_C,  0x1b81be05, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  45. DEFINE_GUID(DXVA_ModeH263_D,  0x1b81be06, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  46. DEFINE_GUID(DXVA_ModeH263_E,  0x1b81be07, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  47. DEFINE_GUID(DXVA_ModeH263_F,  0x1b81be08, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  48.  
  49. DEFINE_GUID(DXVA_ModeMPEG1_A, 0x1b81be09, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  50.  
  51. DEFINE_GUID(DXVA_ModeMPEG2_A, 0x1b81be0A, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  52. DEFINE_GUID(DXVA_ModeMPEG2_B, 0x1b81be0B, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  53. DEFINE_GUID(DXVA_ModeMPEG2_C, 0x1b81be0C, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  54. DEFINE_GUID(DXVA_ModeMPEG2_D, 0x1b81be0D, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  55.  
  56. DEFINE_GUID(DXVA_ModeWMV8_A,  0x1b81be80, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  57. DEFINE_GUID(DXVA_ModeWMV8_B,  0x1b81be81, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  58.  
  59. DEFINE_GUID(DXVA_ModeWMV9_A,  0x1b81be90, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  60. DEFINE_GUID(DXVA_ModeWMV9_B,  0x1b81be91, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  61. DEFINE_GUID(DXVA_ModeWMV9_Ai, 0x1b81be92, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  62. DEFINE_GUID(DXVA_ModeWMV9_Bi, 0x1b81be93, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  63.  
  64. DEFINE_GUID(DXVA_ModeWMV9_C,  0x1b81be94, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  65. DEFINE_GUID(DXVA_ModeWMVA_A,  0x1b81be96, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  66. DEFINE_GUID(DXVA_ModeWMVA_B,  0x1b81be97, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  67. DEFINE_GUID(DXVA_ModeWMVA_C,  0x1b81be98, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  68.  
  69. DEFINE_GUID(DXVA_NoEncrypt,   0x1b81beD0, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  70.  
  71. #define DXVA_RESTRICTED_MODE_UNRESTRICTED        0xFFFF
  72. #define DXVA_RESTRICTED_MODE_H261_A              1
  73. #define DXVA_RESTRICTED_MODE_H261_B              2
  74.  
  75. #define DXVA_RESTRICTED_MODE_H263_A              3
  76. #define DXVA_RESTRICTED_MODE_H263_B              4
  77. #define DXVA_RESTRICTED_MODE_H263_C              5
  78. #define DXVA_RESTRICTED_MODE_H263_D              6
  79. #define DXVA_RESTRICTED_MODE_H263_E              7
  80. #define DXVA_RESTRICTED_MODE_H263_F              8
  81.  
  82. #define DXVA_RESTRICTED_MODE_MPEG1_A             9
  83.  
  84. #define DXVA_RESTRICTED_MODE_MPEG2_A             0xA
  85. #define DXVA_RESTRICTED_MODE_MPEG2_B             0xB
  86. #define DXVA_RESTRICTED_MODE_MPEG2_C             0xC
  87. #define DXVA_RESTRICTED_MODE_MPEG2_D             0xD
  88.  
  89. #define DXVA_RESTRICTED_MODE_WMV8_A              0x80
  90. #define DXVA_RESTRICTED_MODE_WMV8_B              0x81
  91.  
  92. #define DXVA_RESTRICTED_MODE_WMV9_A              0x90
  93. #define DXVA_RESTRICTED_MODE_WMV9_B              0x91
  94. #define DXVA_RESTRICTED_MODE_WMV9_Ai             0x92
  95. #define DXVA_RESTRICTED_MODE_WMV9_Bi             0x93
  96. #define DXVA_RESTRICTED_MODE_WMV9_C              0x94
  97. #define DXVA_RESTRICTED_MODE_WMVA_A              0x96
  98. #define DXVA_RESTRICTED_MODE_WMVA_B              0x97
  99. #define DXVA_RESTRICTED_MODE_WMVA_C              0x98
  100.  
  101. #define DXVA_COMPBUFFER_TYPE_THAT_IS_NOT_USED    0
  102. #define DXVA_PICTURE_DECODE_BUFFER               1
  103. #define DXVA_MACROBLOCK_CONTROL_BUFFER           2
  104. #define DXVA_RESIDUAL_DIFFERENCE_BUFFER          3
  105. #define DXVA_DEBLOCKING_CONTROL_BUFFER           4
  106. #define DXVA_INVERSE_QUANTIZATION_MATRIX_BUFFER  5
  107. #define DXVA_SLICE_CONTROL_BUFFER                6
  108. #define DXVA_BITSTREAM_DATA_BUFFER               7
  109. #define DXVA_AYUV_BUFFER                         8
  110. #define DXVA_IA44_SURFACE_BUFFER                 9
  111. #define DXVA_DPXD_SURFACE_BUFFER                10
  112. #define DXVA_HIGHLIGHT_BUFFER                   11
  113. #define DXVA_DCCMD_SURFACE_BUFFER               12
  114. #define DXVA_ALPHA_BLEND_COMBINATION_BUFFER     13
  115. #define DXVA_PICTURE_RESAMPLE_BUFFER            14
  116. #define DXVA_READ_BACK_BUFFER                   15
  117.  
  118. #define DXVA_NUM_TYPES_COMP_BUFFERS             16
  119.  
  120. /* values for bDXVA_Func */
  121. #define DXVA_PICTURE_DECODING_FUNCTION        1
  122. #define DXVA_ALPHA_BLEND_DATA_LOAD_FUNCTION   2
  123. #define DXVA_ALPHA_BLEND_COMBINATION_FUNCTION 3
  124. #define DXVA_PICTURE_RESAMPLE_FUNCTION        4
  125.  
  126. /* values returned from Execute command in absence of read-back */
  127. #define DXVA_EXECUTE_RETURN_OK                  0
  128. #define DXVA_EXECUTE_RETURN_DATA_ERROR_MINOR    1
  129. #define DXVA_EXECUTE_RETURN_DATA_ERROR_SIGNIF   2
  130. #define DXVA_EXECUTE_RETURN_DATA_ERROR_SEVERE   3
  131. #define DXVA_EXECUTE_RETURN_OTHER_ERROR_SEVERE  4
  132.  
  133.  
  134. #pragma pack(push, BeforeDXVApacking, 1)
  135.  
  136.  
  137. typedef struct _DXVA_ConnectMode {
  138.   GUID guidMode;
  139.   WORD wRestrictedMode;
  140. } DXVA_ConnectMode, *LPDXVA_ConnectMode;
  141.  
  142.  
  143. typedef DWORD DXVA_ConfigQueryOrReplyFunc, *LPDXVA_ConfigQueryOrReplyFunc;
  144.  
  145. #define DXVA_QUERYORREPLYFUNCFLAG_DECODER_PROBE_QUERY     0xFFFFF1
  146. #define DXVA_QUERYORREPLYFUNCFLAG_DECODER_LOCK_QUERY      0xFFFFF5
  147. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_COPY     0xFFFFF8
  148. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_PLUS     0xFFFFF9
  149. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_OK_COPY      0xFFFFFC
  150. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_FALSE_PLUS  0xFFFFFB
  151. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_FALSE_PLUS   0xFFFFFF
  152.  
  153. #define readDXVA_QueryOrReplyFuncFlag(ptr)        ((*(ptr)) >> 8)
  154.  
  155. #define readDXVA_QueryOrReplyFuncFlag_ACCEL(ptr)  (((*(ptr)) >> 11) & 1)
  156. #define readDXVA_QueryOrReplyFuncFlag_LOCK(ptr)   (((*(ptr)) >> 10) & 1)
  157. #define readDXVA_QueryOrReplyFuncFlag_BAD(ptr)    (((*(ptr)) >>  9) & 1)
  158. #define readDXVA_QueryOrReplyFuncFlag_PLUS(ptr)   (((*(ptr)) >>  8) & 1)
  159.  
  160. #define readDXVA_QueryOrReplyFuncFunc(ptr)        ((*(ptr)) & 0xFF)
  161.  
  162. #define writeDXVA_QueryOrReplyFunc(ptr, flg, fnc) ((*(ptr)) = ((flg) << 8) | (fnc))
  163.  
  164. #define setDXVA_QueryOrReplyFuncFlag(ptr, flg) ((*(ptr)) |= ((flg) << 8))
  165. #define setDXVA_QueryOrReplyFuncFunc(ptr, fnc) ((*(ptr)) |= (fnc));
  166.  
  167. typedef DWORD DXVA_EncryptProtocolFunc, *LPDXVA_EncryptProtocolFunc;
  168.  
  169. #define DXVA_ENCRYPTPROTOCOLFUNCFLAG_HOST    0xFFFF00
  170. #define DXVA_ENCRYPTPROTOCOLFUNCFLAG_ACCEL   0xFFFF08
  171.  
  172. #define readDXVA_EncryptProtocolFuncFlag(ptr)        ((*(ptr)) >> 8)
  173. #define readDXVA_EncryptProtocolFuncFlag_ACCEL(ptr)  (((*(ptr)) >> 11) & 1)
  174.  
  175. #define readDXVA_EncryptProtocolFuncFunc(ptr)        ((*(ptr)) & 0xFF)
  176.  
  177. #define writeDXVA_EncryptProtocolFunc(ptr, flg, fnc) ((*(ptr)) = ((flg) << 8) | (fnc))
  178.  
  179. #define setDXVA_EncryptProtocolFuncFlag(ptr, flg) ((*(ptr)) |= ((flg) << 8))
  180. #define setDXVA_EncryptProtocolFuncFunc(ptr, fnc) ((*(ptr)) |= (fnc));
  181.  
  182. typedef struct _DXVA_EncryptProtocolHeader {
  183.   DXVA_EncryptProtocolFunc dwFunction;
  184.   DWORD ReservedBits[3];
  185.   GUID  guidEncryptProtocol;
  186. } DXVA_EncryptProtocolHeader, *LPDXVA_EncryptProtocolHeader;
  187.  
  188. typedef struct _DXVA_ConfigPictureDecode {
  189.  
  190.   // Operation Indicated
  191.   DXVA_ConfigQueryOrReplyFunc dwFunction;
  192.  
  193.   // Alignment
  194.   DWORD dwReservedBits[3];
  195.  
  196.   // Encryption GUIDs
  197.   GUID guidConfigBitstreamEncryption;
  198.   GUID guidConfigMBcontrolEncryption;
  199.   GUID guidConfigResidDiffEncryption;
  200.  
  201.   // Bitstream Processing Indicator
  202.   BYTE bConfigBitstreamRaw;
  203.  
  204.   // Macroblock Control Config
  205.   BYTE bConfigMBcontrolRasterOrder;
  206.  
  207.   // Host Resid Diff Config
  208.   BYTE bConfigResidDiffHost;
  209.   BYTE bConfigSpatialResid8;
  210.   BYTE bConfigResid8Subtraction;
  211.   BYTE bConfigSpatialHost8or9Clipping;
  212.   BYTE bConfigSpatialResidInterleaved;
  213.   BYTE bConfigIntraResidUnsigned;
  214.  
  215.   // Accelerator Resid Diff Config
  216.   BYTE bConfigResidDiffAccelerator;
  217.   BYTE bConfigHostInverseScan;
  218.   BYTE bConfigSpecificIDCT;
  219.   BYTE bConfig4GroupedCoefs;
  220. } DXVA_ConfigPictureDecode, *LPDXVA_ConfigPictureDecode;
  221.  
  222.  
  223. /* Picture Decoding Parameters */
  224.  
  225. typedef struct _DXVA_PictureParameters {
  226.  
  227.   WORD wDecodedPictureIndex;
  228.   WORD wDeblockedPictureIndex;
  229.  
  230.   WORD wForwardRefPictureIndex;
  231.   WORD wBackwardRefPictureIndex;
  232.  
  233.   WORD wPicWidthInMBminus1;
  234.   WORD wPicHeightInMBminus1;
  235.  
  236.   BYTE bMacroblockWidthMinus1;
  237.   BYTE bMacroblockHeightMinus1;
  238.  
  239.   BYTE bBlockWidthMinus1;
  240.   BYTE bBlockHeightMinus1;
  241.  
  242.   BYTE bBPPminus1;
  243.  
  244.   BYTE bPicStructure;
  245.   BYTE bSecondField;
  246.   BYTE bPicIntra;
  247.   BYTE bPicBackwardPrediction;
  248.  
  249.   BYTE bBidirectionalAveragingMode;
  250.   BYTE bMVprecisionAndChromaRelation;
  251.   BYTE bChromaFormat;
  252.  
  253.   BYTE bPicScanFixed;
  254.   BYTE bPicScanMethod;
  255.   BYTE bPicReadbackRequests;
  256.  
  257.   BYTE bRcontrol;
  258.   BYTE bPicSpatialResid8;
  259.   BYTE bPicOverflowBlocks;
  260.   BYTE bPicExtrapolation;
  261.  
  262.   BYTE bPicDeblocked;
  263.   BYTE bPicDeblockConfined;
  264.   BYTE bPic4MVallowed;
  265.   BYTE bPicOBMC;
  266.   BYTE bPicBinPB;
  267.   BYTE bMV_RPS;
  268.  
  269.   BYTE bReservedBits;
  270.  
  271.   WORD wBitstreamFcodes;
  272.   WORD wBitstreamPCEelements;
  273.   BYTE bBitstreamConcealmentNeed;
  274.   BYTE bBitstreamConcealmentMethod;
  275.  
  276. } DXVA_PictureParameters, *LPDXVA_PictureParameters;
  277.  
  278.  
  279.  
  280. /* Picture Resampling */
  281.  
  282. typedef struct _DXVA_PicResample {
  283.  
  284.   WORD  wPicResampleSourcePicIndex;
  285.   WORD  wPicResampleDestPicIndex;
  286.  
  287.   WORD  wPicResampleRcontrol;
  288.   BYTE  bPicResampleExtrapWidth;
  289.   BYTE  bPicResampleExtrapHeight;
  290.  
  291.   DWORD dwPicResampleSourceWidth;
  292.   DWORD dwPicResampleSourceHeight;
  293.  
  294.   DWORD dwPicResampleDestWidth;
  295.   DWORD dwPicResampleDestHeight;
  296.  
  297.   DWORD dwPicResampleFullDestWidth;
  298.   DWORD dwPicResampleFullDestHeight;
  299.  
  300. } DXVA_PicResample, *LPDXVA_PicResample;
  301.  
  302.  
  303. #define DXVA_CHROMA_FORMAT_420 1
  304. #define DXVA_CHROMA_FORMAT_422 2
  305. #define DXVA_CHROMA_FORMAT_444 3
  306.  
  307. #define DXVA_PICTURE_STRUCTURE_TOP_FIELD    1
  308. #define DXVA_PICTURE_STRUCTURE_BOTTOM_FIELD 2
  309. #define DXVA_PICTURE_STRUCTURE_FRAME        3
  310.  
  311. #define DXVA_BIDIRECTIONAL_AVERAGING_MPEG2_ROUND 0
  312. #define DXVA_BIDIRECTIONAL_AVERAGING_H263_TRUNC  1
  313.  
  314. #define DXVA_MV_PRECISION_AND_CHROMA_RELATION_MPEG2  0
  315. #define DXVA_MV_PRECISION_AND_CHROMA_RELATION_H263   1
  316. #define DXVA_MV_PRECISION_AND_CHROMA_RELATION_H261   2
  317.  
  318. #define DXVA_SCAN_METHOD_ZIG_ZAG              0
  319. #define DXVA_SCAN_METHOD_ALTERNATE_VERTICAL   1
  320. #define DXVA_SCAN_METHOD_ALTERNATE_HORIZONTAL 2
  321. #define DXVA_SCAN_METHOD_ARBITRARY            3
  322.  
  323. #define DXVA_BITSTREAM_CONCEALMENT_NEED_UNLIKELY 0
  324. #define DXVA_BITSTREAM_CONCEALMENT_NEED_MILD     1
  325. #define DXVA_BITSTREAM_CONCEALMENT_NEED_LIKELY   2
  326. #define DXVA_BITSTREAM_CONCEALMENT_NEED_SEVERE   3
  327.  
  328. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_UNSPECIFIED 0
  329. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_INTRA       1
  330. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_FORWARD     2
  331. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_BACKWARD    3
  332.  
  333.  
  334. /* Buffer Description Data */
  335.  
  336. typedef struct _DXVA_BufferDescription {
  337.   DWORD dwTypeIndex;
  338.   DWORD dwBufferIndex;
  339.   DWORD dwDataOffset;
  340.   DWORD dwDataSize;
  341.   DWORD dwFirstMBaddress;
  342.   DWORD dwNumMBsInBuffer;
  343.   DWORD dwWidth;
  344.   DWORD dwHeight;
  345.   DWORD dwStride;
  346.   DWORD dwReservedBits;
  347. } DXVA_BufferDescription, *LPDXVA_BufferDescription;
  348.  
  349.  
  350. /* Off-Host IDCT Coefficient Data Structures */
  351.  
  352. typedef struct _DXVA_TCoef4Group {
  353.   BYTE  TCoefIDX[4];
  354.   SHORT TCoefValue[4];
  355. } DXVA_TCoef4Group, *LPDXVA_TCoef4Group;
  356.  
  357. typedef struct _DXVA_TCoefSingle {
  358.   WORD  wIndexWithEOB;
  359.   SHORT TCoefValue;
  360. } DXVA_TCoefSingle, *LPDXVA_TCoefSingle;
  361.  
  362. /* Macros for Reading EOB and Index Values */
  363.  
  364. #define readDXVA_TCoefSingleIDX(ptr) ((ptr)->wIndexWithEOB >> 1)
  365. #define readDXVA_TCoefSingleEOB(ptr) ((ptr)->wIndexWithEOB & 1)
  366.  
  367. /* Macro for Writing EOB and Index Values */
  368.  
  369. #define writeDXVA_TCoefSingleIndexWithEOB(ptr, idx, eob) ((ptr)->wIndexWithEOB = ((idx) << 1) | (eob))
  370. #define setDXVA_TCoefSingleIDX(ptr, idx) ((ptr)->wIndexWithEOB |= ((idx) << 1))
  371. #define setDXVA_TCoefSingleEOB(ptr)      ((ptr)->wIndexWithEOB |= 1)
  372.  
  373. /* Spatial-Domain Residual Difference Blocks */
  374.  
  375. #define DXVA_USUAL_BLOCK_WIDTH   8
  376. #define DXVA_USUAL_BLOCK_HEIGHT  8
  377. #define DXVA_USUAL_BLOCK_SIZE   (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT)
  378.  
  379. typedef SHORT       DXVA_Sample16[DXVA_USUAL_BLOCK_SIZE];
  380. typedef signed char DXVA_Sample8 [DXVA_USUAL_BLOCK_SIZE];
  381.  
  382. /* Deblocking Filter Control Structure */
  383.  
  384. typedef BYTE DXVA_DeblockingEdgeControl;
  385.  
  386. typedef DXVA_DeblockingEdgeControl * LPDXVA_DeblockingEdgeControl;
  387.  
  388. /* Macros for Reading STRENGTH and FilterOn */
  389.  
  390. #define readDXVA_EdgeFilterStrength(ptr) ((*(ptr)) >> 1)
  391. #define readDXVA_EdgeFilterOn(ptr)       ((*(ptr)) & 1)
  392.  
  393. /* Macro for Writing STRENGTH and FilterOn */
  394.  
  395. #define writeDXVA_DeblockingEdgeControl(ptr, str, fon) ((*(ptr)) = ((str) << 1) | (fon))
  396. #define setDXVA_EdgeFilterStrength(ptr, str)           ((*(ptr)) |= ((str) << 1))
  397. #define setDXVA_EdgeFilterOn(ptr)                      ((*(ptr)) |= 1)
  398.  
  399.  
  400. /* Macroblock Control Command Data Structures */
  401.  
  402. typedef struct _DXVA_MVvalue {
  403.   SHORT horz, vert;
  404. } DXVA_MVvalue, *LPDXVA_MVvalue;
  405.  
  406.  
  407. /* Inverse Quantization Matrices */
  408.  
  409. typedef struct _DXVA_QmatrixData {
  410.   BYTE bNewQmatrix[4]; /* intra Y, inter Y, intra chroma, inter chroma */
  411.   WORD Qmatrix[4][DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT];
  412. } DXVA_QmatrixData, *LPDXVA_QmatrixData;
  413.  
  414.  
  415. /* Slice Control Buffer Data */
  416.  
  417. typedef struct _DXVA_SliceInfo {
  418.   WORD  wHorizontalPosition;
  419.   WORD  wVerticalPosition;
  420.   DWORD dwSliceBitsInBuffer;
  421.   DWORD dwSliceDataLocation;
  422.   BYTE  bStartCodeBitOffset;
  423.   BYTE  bReservedBits;
  424.   WORD  wMBbitOffset;
  425.   WORD  wNumberMBsInSlice;
  426.   WORD  wQuantizerScaleCode;
  427.   WORD  wBadSliceChopping;
  428. } DXVA_SliceInfo, *LPDXVA_SliceInfo;
  429.  
  430.  
  431. #define DXVA_NumMV_OBMC_off_BinPBwith4MV_off    4
  432. #define DXVA_NumMV_OBMC_off_BinPBwith4MV_on  (4+1)
  433. #define DXVA_NumMV_OBMC_on__BinPB_off         (10)
  434. #define DXVA_NumMV_OBMC_on__BinPB_on          (11) /* not current standards */
  435.  
  436. #define DXVA_NumBlocksPerMB_420 (4+2+0)
  437. #define DXVA_NumBlocksPerMB_422 (4+2+2)
  438. #define DXVA_NumBlocksPerMB_444 (4+4+4)
  439.  
  440. /* Basic form for I pictures */
  441. /* Host Residual Differences */
  442. typedef struct _DXVA_MBctrl_I_HostResidDiff_1 {
  443.   WORD  wMBaddress;
  444.   WORD  wMBtype;
  445.   DWORD dwMB_SNL;
  446.   WORD  wPatternCode;
  447.   WORD  wPC_Overflow; /* zero if not overflow format */
  448.   DWORD dwReservedBits2;
  449. } DXVA_MBctrl_I_HostResidDiff_1;
  450.  
  451. /* Basic form for I pictures */
  452. /* Off-Host IDCT, 4:2:0 sampling */
  453. typedef struct _DXVA_MBctrl_I_OffHostIDCT_1 {
  454.   WORD  wMBaddress;
  455.   WORD  wMBtype;
  456.   DWORD dwMB_SNL;
  457.   WORD  wPatternCode;
  458.   BYTE  bNumCoef[DXVA_NumBlocksPerMB_420];
  459. } DXVA_MBctrl_I_OffHostIDCT_1;
  460.  
  461. /* Basic form for P and B pictures */
  462. /* Should also be used for concealment MVs in MPEG-2 I pictures */
  463. /* Without OBMC, without BinPB and 4MV together, without MV RPS */
  464. /* Host Residual Differences */
  465. typedef struct _DXVA_MBctrl_P_HostResidDiff_1 {
  466.   WORD         wMBaddress;
  467.   WORD         wMBtype;
  468.   DWORD        dwMB_SNL;
  469.   WORD         wPatternCode;
  470.   WORD         wPC_Overflow; /* zero if not overflow format */
  471.   DWORD        dwReservedBits2;
  472.   DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
  473. } DXVA_MBctrl_P_HostResidDiff_1;
  474.  
  475. /* Basic form for P and B pictures */
  476. /* Without OBMC, without BinPB and 4MV together, without MV RPS */
  477. /* Off-Host IDCT, 4:2:0 sampling */
  478. typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
  479.   WORD         wMBaddress;
  480.   WORD         wMBtype;
  481.   DWORD        dwMB_SNL;
  482.   WORD         wPatternCode;
  483.   BYTE         bNumCoef[DXVA_NumBlocksPerMB_420];
  484.   DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
  485. } DXVA_MBctrl_P_OffHostIDCT_1;
  486.  
  487. /* How to load alpha blending graphic data */
  488. typedef struct _DXVA_ConfigAlphaLoad {
  489.  
  490.   // Operation Indicated
  491.   DXVA_ConfigQueryOrReplyFunc dwFunction;
  492.  
  493.   // Alignment
  494.   DWORD dwReservedBits[3];
  495.  
  496.   BYTE  bConfigDataType;
  497. } DXVA_ConfigAlphaLoad, *LPDXVA_ConfigAlphaLoad;
  498.  
  499. #define DXVA_CONFIG_DATA_TYPE_IA44  0
  500. #define DXVA_CONFIG_DATA_TYPE_AI44  1
  501. #define DXVA_CONFIG_DATA_TYPE_DPXD  2
  502. #define DXVA_CONFIG_DATA_TYPE_AYUV  3
  503.  
  504.  
  505. /* How to combine alpha blending graphic data */
  506. typedef struct _DXVA_ConfigAlphaCombine {
  507.  
  508.   // Operation Indicated
  509.   DXVA_ConfigQueryOrReplyFunc dwFunction;
  510.  
  511.   // Alignment
  512.   DWORD dwReservedBits[3];
  513.  
  514.   BYTE  bConfigBlendType;
  515.   BYTE  bConfigPictureResizing;
  516.   BYTE  bConfigOnlyUsePicDestRectArea;
  517.   BYTE  bConfigGraphicResizing;
  518.   BYTE  bConfigWholePlaneAlpha;
  519.  
  520. } DXVA_ConfigAlphaCombine, *LPDXVA_ConfigAlphaCombine;
  521.  
  522. #define DXVA_CONFIG_BLEND_TYPE_FRONT_BUFFER   0
  523. #define DXVA_CONFIG_BLEND_TYPE_BACK_HARDWARE  1
  524.  
  525.  
  526. /* AYUV sample for 16-entry YUV palette or graphic surface */
  527.  
  528. typedef struct _DXVA_AYUVsample2 {
  529.   BYTE bCrValue;
  530.   BYTE bCbValue;
  531.   BYTE bY_Value;
  532.   BYTE bSampleAlpha8;
  533. } DXVA_AYUVsample2, *LPDXVA_AYUVsample2;
  534.  
  535. /* Macros for IA44 alpha blending surface samples */
  536.  
  537. typedef BYTE DXVA_IA44sample, *LPDXVA_IA44sample;
  538.  
  539. #define readDXVA_IA44index(ptr) (((*(ptr)) & 0xF0) >> 4)
  540. #define readDXVA_IA44alpha(ptr)  ((*(ptr)) & 0x0F)
  541.  
  542. #define writeDXVA_IA44(ptr, idx, alpha) ((*(ptr)) = (((idx) << 4) | (alpha)))
  543.  
  544. #define setDXVA_IA44index(ptr, idx)    ((*(ptr)) |= ((idx) << 4))
  545. #define setDXVA_IA44alpha(ptr, alpha)  ((*(ptr)) |= (alpha))
  546.  
  547. /* Macros for AI44 alpha blending surface samples */
  548.  
  549. typedef BYTE DXVA_AI44sample, *LPDXVA_AI44sample;
  550.  
  551. #define readDXVA_AI44index(ptr)  ((*(ptr)) & 0x0F)
  552. #define readDXVA_AI44alpha(ptr) (((*(ptr)) & 0xF0) >> 4)
  553.  
  554. #define writeDXVA_AI44(ptr, idx, alpha) ((*(ptr)) = (((alpha) << 4) | (idx)))
  555.  
  556. #define setDXVA_AI44index(ptr, idx)    ((*(ptr)) |= (idx))
  557. #define setDXVA_AI44alpha(ptr, alpha)  ((*(ptr)) |= ((alpha) << 4))
  558.  
  559.  
  560. /* Highlight data structure */
  561.  
  562. typedef struct _DXVA_Highlight {
  563.   WORD wHighlightActive;
  564.   WORD wHighlightIndices;
  565.   WORD wHighlightAlphas;
  566.   RECT HighlightRect;
  567. } DXVA_Highlight, *LPDXVA_Highlight;
  568.  
  569. typedef BYTE DXVA_DPXD,  *LPDXVA_DPXD;
  570. typedef WORD DXVA_DCCMD, *LPDXVA_DCCMD;
  571.  
  572. /* Alpha blend combination */
  573.  
  574. typedef struct _DXVA_BlendCombination {
  575.   WORD wPictureSourceIndex;
  576.   WORD wBlendedDestinationIndex;
  577.   RECT PictureSourceRect16thPel;
  578.   RECT PictureDestinationRect;
  579.   RECT GraphicSourceRect;
  580.   RECT GraphicDestinationRect;
  581.   WORD wBlendDelay;
  582.   BYTE bBlendOn;
  583.   BYTE bWholePlaneAlpha;
  584.   DXVA_AYUVsample2 OutsideYUVcolor;
  585. } DXVA_BlendCombination, *LPDXVA_BlendCombination;
  586.  
  587.  
  588. #pragma pack(push, 16)
  589.  
  590.  
  591. typedef DXVA_MBctrl_I_HostResidDiff_1 *
  592.        LPDXVA_MBctrl_I_HostResidDiff_1;
  593.  
  594. typedef DXVA_MBctrl_I_OffHostIDCT_1 *
  595.        LPDXVA_MBctrl_I_OffHostIDCT_1;
  596.  
  597. typedef DXVA_MBctrl_P_HostResidDiff_1 *
  598.        LPDXVA_MBctrl_P_HostResidDiff_1;
  599.  
  600. typedef DXVA_MBctrl_P_OffHostIDCT_1 *
  601.        LPDXVA_MBctrl_P_OffHostIDCT_1;
  602.  
  603.  
  604. #pragma pack(pop)
  605.  
  606. /*
  607.  * Other forms of pictures are constructed in the obvious way
  608.  * from the above by adjusting the number of residual difference
  609.  * blocks, the number of motion vectors per macroblock, etc.
  610.  */
  611.  
  612. #define readDXVA_MBskipsFollowing(ptr)       (((ptr)->dwMB_SNL & 0xFF000000) >> 24)
  613. #define readDXVA_MBdataLocation(ptr)         (((ptr)->dwMB_SNL & 0x00FFFFFF))
  614.  
  615. #define writeDXVA_MB_SNL(ptr, skips, dloc)   ((ptr)->dwMB_SNL = (((skips) << 24) | (dloc)))
  616. #define setDXVA_MBskipsFollowing(ptr, skips) ((ptr)->dwMB_SNL |= ((skips) << 24))
  617. #define setDXVA_MBdataLocation(ptr, dloc)    ((ptr)->dwMB_SNL |= (dloc))
  618.  
  619. #define readDXVA_MvertFieldSel_3(ptr)    (((ptr)->wMBtype & 0x8000) >> 15)
  620. #define readDXVA_MvertFieldSel_2(ptr)    (((ptr)->wMBtype & 0x4000) >> 14)
  621. #define readDXVA_MvertFieldSel_1(ptr)    (((ptr)->wMBtype & 0x2000) >> 13)
  622. #define readDXVA_MvertFieldSel_0(ptr)    (((ptr)->wMBtype & 0x1000) >> 12)
  623. #define readDXVA_ReservedBits(ptr)       (((ptr)->wMBtype & 0x0800) >> 11)
  624. #define readDXVA_HostResidDiff(ptr)      (((ptr)->wMBtype & 0x0400) >> 10)
  625. #define readDXVA_MotionType(ptr)         (((ptr)->wMBtype & 0x0300) >>  8)
  626. #define readDXVA_MBscanMethod(ptr)       (((ptr)->wMBtype & 0x00C0) >>  6)
  627. #define readDXVA_FieldResidual(ptr)      (((ptr)->wMBtype & 0x0020) >>  5)
  628. #define readDXVA_H261LoopFilter(ptr)     (((ptr)->wMBtype & 0x0010) >>  4)
  629. #define readDXVA_Motion4MV(ptr)          (((ptr)->wMBtype & 0x0008) >>  3)
  630. #define readDXVA_MotionBackward(ptr)     (((ptr)->wMBtype & 0x0004) >>  2)
  631. #define readDXVA_MotionForward(ptr)      (((ptr)->wMBtype & 0x0002) >>  1)
  632. #define readDXVA_IntraMacroblock(ptr)    (((ptr)->wMBtype & 0x0001))
  633.  
  634. #define setDXVA_MvertFieldSel_3(ptr)     ((ptr)->wMBtype |= 0x8000)
  635. #define setDXVA_MvertFieldSel_2(ptr)     ((ptr)->wMBtype |= 0x4000)
  636. #define setDXVA_MvertFieldSel_1(ptr)     ((ptr)->wMBtype |= 0x2000)
  637. #define setDXVA_MvertFieldSel_0(ptr)     ((ptr)->wMBtype |= 0x1000)
  638. #define setDXVA_ReservedBits(ptr)        ((ptr)->wMBtype |= 0x0800)
  639. #define setDXVA_HostResidDiff(ptr)       ((ptr)->wMBtype |= 0x0400)
  640. #define setDXVA_MotionType(ptr, value)   ((ptr)->wMBtype |= ((value) << 8))
  641. #define setDXVA_MBscanMethod(ptr, value) ((ptr)->wMBtype |= ((value) << 6))
  642. #define setDXVA_FieldResidual(ptr)       ((ptr)->wMBtype |= 0x0020)
  643. #define setDXVA_H261LoopFilter(ptr)      ((ptr)->wMBtype |= 0x0010)
  644. #define setDXVA_Motion4MV(ptr)           ((ptr)->wMBtype |= 0x0008)
  645. #define setDXVA_MotionBackward(ptr)      ((ptr)->wMBtype |= 0x0004)
  646. #define setDXVA_MotionForward(ptr)       ((ptr)->wMBtype |= 0x0002)
  647. #define setDXVA_IntraMacroblock(ptr)     ((ptr)->wMBtype |= 0x0001)
  648.  
  649. #define readDXVA_Y___0coded(ptr)        (((ptr)->wPatternCode & 0x0800) >> 11)
  650. #define readDXVA_Y___1coded(ptr)        (((ptr)->wPatternCode & 0x0400) >> 10)
  651. #define readDXVA_Y___2coded(ptr)        (((ptr)->wPatternCode & 0x0200) >>  9)
  652. #define readDXVA_Y___3coded(ptr)        (((ptr)->wPatternCode & 0x0100) >>  8)
  653. #define readDXVA_Cb__4coded(ptr)        (((ptr)->wPatternCode & 0x0080) >>  7)
  654. #define readDXVA_Cr__5coded(ptr)        (((ptr)->wPatternCode & 0x0040) >>  6)
  655. #define readDXVA_Cb__6coded(ptr)        (((ptr)->wPatternCode & 0x0020) >>  5)
  656. #define readDXVA_Cr__7coded(ptr)        (((ptr)->wPatternCode & 0x0010) >>  4)
  657. #define readDXVA_Cb__8coded(ptr)        (((ptr)->wPatternCode & 0x0008) >>  3)
  658. #define readDXVA_Cb__9coded(ptr)        (((ptr)->wPatternCode & 0x0004) >>  2)
  659. #define readDXVA_Cr_10coded(ptr)        (((ptr)->wPatternCode & 0x0002) >>  1)
  660. #define readDXVA_Cr_11coded(ptr)        (((ptr)->wPatternCode & 0x0001))
  661.  
  662. #define readDXVA_Y___0oflow(ptr)        (((ptr)->wPC_Overflow & 0x0800) >> 11)
  663. #define readDXVA_Y___1oflow(ptr)        (((ptr)->wPC_Overflow & 0x0400) >> 10)
  664. #define readDXVA_Y___2oflow(ptr)        (((ptr)->wPC_Overflow & 0x0200) >>  9)
  665. #define readDXVA_Y___3oflow(ptr)        (((ptr)->wPC_Overflow & 0x0100) >>  8)
  666. #define readDXVA_Cb__4oflow(ptr)        (((ptr)->wPC_Overflow & 0x0080) >>  7)
  667. #define readDXVA_Cr__5oflow(ptr)        (((ptr)->wPC_Overflow & 0x0040) >>  6)
  668. #define readDXVA_Cb__6oflow(ptr)        (((ptr)->wPC_Overflow & 0x0020) >>  5)
  669. #define readDXVA_Cr__7oflow(ptr)        (((ptr)->wPC_Overflow & 0x0010) >>  4)
  670. #define readDXVA_Cb__8oflow(ptr)        (((ptr)->wPC_Overflow & 0x0008) >>  3)
  671. #define readDXVA_Cb__9oflow(ptr)        (((ptr)->wPC_Overflow & 0x0004) >>  2)
  672. #define readDXVA_Cr_10oflow(ptr)        (((ptr)->wPC_Overflow & 0x0002) >>  1)
  673. #define readDXVA_Cr_11oflow(ptr)        (((ptr)->wPC_Overflow & 0x0001))
  674.  
  675. #pragma pack(pop, BeforeDXVApacking)
  676. #endif  /*   __DIRECTX_VA_DECODER__   */
  677.  
  678.  
  679. // -------------------------------------------------------------------------
  680. //
  681. // D3DFORMAT describes a pixel memory layout, DXVA sample format contains
  682. // additional information that describes how the pixels should be interpreted.
  683. //
  684. // DXVA Extended color data - occupies the SampleFormat DWORD
  685. // data fields.
  686. // -------------------------------------------------------------------------
  687. #ifndef __DIRECTX_VA_SAMPLEFORMAT__
  688. #define __DIRECTX_VA_SAMPLEFORMAT__
  689.  
  690. typedef enum _DXVA_SampleFormat {
  691.     DXVA_SampleFormatMask = 0xFF,   // 8 bits used for DXVA Sample format
  692.     DXVA_SampleUnknown = 0,
  693.     DXVA_SamplePreviousFrame = 1,
  694.     DXVA_SampleProgressiveFrame = 2,
  695.     DXVA_SampleFieldInterleavedEvenFirst = 3,
  696.     DXVA_SampleFieldInterleavedOddFirst = 4,
  697.     DXVA_SampleFieldSingleEven = 5,
  698.     DXVA_SampleFieldSingleOdd = 6,
  699.     DXVA_SampleSubStream = 7
  700. } DXVA_SampleFormat;
  701.  
  702. #define DXVA_ExtractSampleFormat(_sf) ((_sf) & (DXVA_SampleFormatMask))
  703.  
  704. #define DXVA_ExtractExtColorData(_sf, _Mask, _Shift) \
  705.     (((_sf) >> (_Shift)) & (_Mask))
  706.  
  707. #define DXVABitMask(__n) (~((~0) << __n))
  708. #define DXVA_ExtColorData_ShiftBase 8
  709. #define DXVAColorMask(__bits,__base) (DXVABitMask(__bits) << ( __base - DXVA_ExtColorData_ShiftBase))
  710.  
  711. typedef enum _DXVA_VideoTransferFunction
  712. {
  713.     DXVA_VideoTransFuncShift = (DXVA_ExtColorData_ShiftBase + 19),
  714.     DXVA_VideoTransFuncMask = DXVAColorMask(5, DXVA_VideoTransFuncShift),
  715.  
  716.     DXVA_VideoTransFunc_Unknown = 0,
  717.     DXVA_VideoTransFunc_10 = 1,
  718.     DXVA_VideoTransFunc_18 = 2,
  719.     DXVA_VideoTransFunc_20 = 3,
  720.     DXVA_VideoTransFunc_22 = 4,
  721.     DXVA_VideoTransFunc_22_709  = 5,
  722.     DXVA_VideoTransFunc_22_240M = 6,
  723.     DXVA_VideoTransFunc_22_8bit_sRGB = 7,
  724.     DXVA_VideoTransFunc_28 = 8
  725. } DXVA_VideoTransferFunction;
  726.  
  727. typedef enum _DXVA_VideoPrimaries
  728. {
  729.     DXVA_VideoPrimariesShift = (DXVA_ExtColorData_ShiftBase + 14),
  730.     DXVA_VideoPrimariesMask = DXVAColorMask(5, DXVA_VideoPrimariesShift),
  731.  
  732.     DXVA_VideoPrimaries_Unknown = 0,
  733.     DXVA_VideoPrimaries_reserved = 1,
  734.     DXVA_VideoPrimaries_BT709 = 2,
  735.     DXVA_VideoPrimaries_BT470_2_SysM = 3,
  736.     DXVA_VideoPrimaries_BT470_2_SysBG = 4,
  737.     DXVA_VideoPrimaries_SMPTE170M = 5,
  738.     DXVA_VideoPrimaries_SMPTE240M = 6,
  739.     DXVA_VideoPrimaries_EBU3213 = 7,
  740.     DXVA_VideoPrimaries_SMPTE_C = 8
  741. } DXVA_VideoPrimaries;
  742.  
  743. typedef enum _DXVA_VideoLighting
  744. {
  745.     DXVA_VideoLightingShift = (DXVA_ExtColorData_ShiftBase + 10),
  746.     DXVA_VideoLightingMask = DXVAColorMask(4, DXVA_VideoLightingShift),
  747.  
  748.     DXVA_VideoLighting_Unknown = 0,
  749.     DXVA_VideoLighting_bright = 1,
  750.     DXVA_VideoLighting_office = 2,
  751.     DXVA_VideoLighting_dim = 3,
  752.     DXVA_VideoLighting_dark = 4
  753. } DXVA_VideoLighting;
  754.  
  755. typedef enum _DXVA_VideoTransferMatrix
  756. {
  757.     DXVA_VideoTransferMatrixShift = (DXVA_ExtColorData_ShiftBase + 7),
  758.     DXVA_VideoTransferMatrixMask = DXVAColorMask(3, DXVA_VideoTransferMatrixShift),
  759.  
  760.     DXVA_VideoTransferMatrix_Unknown = 0,
  761.     DXVA_VideoTransferMatrix_BT709 = 1,
  762.     DXVA_VideoTransferMatrix_BT601 = 2,
  763.     DXVA_VideoTransferMatrix_SMPTE240M = 3
  764. } DXVA_VideoTransferMatrix;
  765.  
  766. typedef enum _DXVA_NominalRange
  767. {
  768.     DXVA_NominalRangeShift = (DXVA_ExtColorData_ShiftBase + 4),
  769.     DXVA_NominalRangeMask = DXVAColorMask(3, DXVA_NominalRangeShift),
  770.  
  771.     DXVA_NominalRange_Unknown = 0,
  772.     DXVA_NominalRange_Normal = 1,
  773.     DXVA_NominalRange_Wide = 2
  774. } DXVA_NominalRange;
  775.  
  776.  
  777. typedef enum _DXVA_VideoChromaSubsampling
  778. {
  779.     DXVA_VideoChromaSubsamplingShift = (DXVA_ExtColorData_ShiftBase + 0),
  780.     DXVA_VideoChromaSubsamplingMask = DXVAColorMask(4, DXVA_VideoChromaSubsamplingShift),
  781.  
  782.     DXVA_VideoChromaSubsampling_Unknown = 0,
  783.     DXVA_VideoChromaSubsampling_ProgressiveChroma = 0x8,
  784.     DXVA_VideoChromaSubsampling_Horizontally_Cosited = 0x4,
  785.     DXVA_VideoChromaSubsampling_Vertically_Cosited = 0x2,
  786.     DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1,
  787. } DXVA_VideoChromaSubsampling;
  788.  
  789. typedef struct _DXVA_ExtendedFormat
  790. {
  791.     UINT                        SampleFormat : 8;           // See DXVA_SampleFormat
  792.     UINT                        VideoChromaSubsampling : 4; // See DXVA_VideoChromaSubSampling
  793.     DXVA_NominalRange           NominalRange : 3;           // See DXVA_NominalRange
  794.     DXVA_VideoTransferMatrix    VideoTransferMatrix : 3;    // See DXVA_VideoTransferMatrix
  795.     DXVA_VideoLighting          VideoLighting : 4;          // See DXVA_VideoLighting
  796.     DXVA_VideoPrimaries         VideoPrimaries : 5;         // See DXVA_VideoPrimaries
  797.     DXVA_VideoTransferFunction  VideoTransferFunction : 5;  // See DXVA_VideoTransferFunction
  798. } DXVA_ExtendedFormat;
  799.  
  800. #endif
  801.  
  802.  
  803.  
  804. // -------------------------------------------------------------------------
  805. //
  806. // The definitions that follow describe the video de-interlace interface
  807. // between the VMR and the graphics device driver.  This interface is not
  808. // accessable via the IAMVideoAccelerator interface.
  809. //
  810. // -------------------------------------------------------------------------
  811. //
  812. #ifndef __DIRECTX_VA_DEINTERLACE__
  813. #define __DIRECTX_VA_DEINTERLACE__
  814.  
  815. typedef LONGLONG REFERENCE_TIME;
  816.  
  817. DEFINE_GUID(DXVA_DeinterlaceBobDevice,
  818.     0x335aa36e,0x7884,0x43a4,0x9c,0x91,0x7f,0x87,0xfa,0xf3,0xe3,0x7e);
  819.  
  820. DEFINE_GUID(DXVA_DeinterlaceContainerDevice,
  821.     0x0e85cb93,0x3046,0x4ff0,0xae,0xcc,0xd5,0x8c,0xb5,0xf0,0x35,0xfd);
  822.  
  823.  
  824. #if (DIRECT3D_VERSION < 0x0800) || !defined(DIRECT3D_VERSION)
  825. typedef DWORD D3DFORMAT;
  826. enum {
  827.     D3DPOOL_DEFAULT                 = 0,
  828.     D3DPOOL_MANAGED                 = 1,
  829.     D3DPOOL_SYSTEMMEM               = 2,
  830.     D3DPOOL_SCRATCH                 = 3,
  831.     D3DPOOL_LOCALVIDMEM             = 4,
  832.     D3DPOOL_NONLOCALVIDMEM          = 5,
  833.     D3DPOOL_FORCE_DWORD             = 0x7fffffff
  834. };
  835. #endif
  836.  
  837.  
  838. // -------------------------------------------------------------------------
  839. // data structures shared by User mode and Kernel mode.
  840. // -------------------------------------------------------------------------
  841. //
  842.  
  843. typedef struct _DXVA_Frequency {
  844.     DWORD Numerator;
  845.     DWORD Denominator;
  846. } DXVA_Frequency;
  847.  
  848. typedef struct _DXVA_VideoDesc {
  849.     DWORD               Size;
  850.     DWORD               SampleWidth;
  851.     DWORD               SampleHeight;
  852.     DWORD               SampleFormat; // also contains extend color data
  853.     D3DFORMAT           d3dFormat;
  854.     DXVA_Frequency      InputSampleFreq;
  855.     DXVA_Frequency      OutputFrameFreq;
  856. } DXVA_VideoDesc, *LPDXVA_VideoDesc;
  857.  
  858. typedef enum _DXVA_VideoProcessCaps {
  859.     DXVA_VideoProcess_None                  = 0x0000,
  860.     DXVA_VideoProcess_YUV2RGB               = 0x0001,
  861.     DXVA_VideoProcess_StretchX              = 0x0002,
  862.     DXVA_VideoProcess_StretchY              = 0x0004,
  863.     DXVA_VideoProcess_AlphaBlend            = 0x0008,
  864.     DXVA_VideoProcess_SubRects              = 0x0010,
  865.     DXVA_VideoProcess_SubStreams            = 0x0020,
  866.     DXVA_VideoProcess_SubStreamsExtended    = 0x0040,
  867.     DXVA_VideoProcess_YUV2RGBExtended       = 0x0080,
  868.     DXVA_VideoProcess_AlphaBlendExtended    = 0x0100
  869. } DXVA_VideoProcessCaps;
  870.  
  871. typedef enum _DXVA_DeinterlaceTech {
  872.  
  873.     // the algorithm is unknown or proprietary
  874.     DXVA_DeinterlaceTech_Unknown                = 0x0000,
  875.  
  876.     // the algorithm creates the missing lines by repeating
  877.     // the line either above or below it - this method will look very jaggy and
  878.     // isn't recommended
  879.     DXVA_DeinterlaceTech_BOBLineReplicate       = 0x0001,
  880.  
  881.     // The algorithm creates the missing lines by vertically stretching each
  882.     // video field by a factor of two by averaging two lines
  883.     DXVA_DeinterlaceTech_BOBVerticalStretch     = 0x0002,
  884.  
  885.     // or using a [-1, 9, 9, -1]/16 filter across four lines.
  886.     DXVA_DeinterlaceTech_BOBVerticalStretch4Tap = 0x0100,
  887.  
  888.     // the pixels in the missing line are recreated by a median filtering operation
  889.     DXVA_DeinterlaceTech_MedianFiltering        = 0x0004,
  890.  
  891.     // the pixels in the missing line are recreated by an edge filter.
  892.     // In this process, spatial directional filters are applied to determine
  893.     // the orientation of edges in the picture content, and missing
  894.     // pixels are created by filtering along (rather than across) the
  895.     // detected edges.
  896.     DXVA_DeinterlaceTech_EdgeFiltering          = 0x0010,
  897.  
  898.     // the pixels in the missing line are recreated by switching on a field by
  899.     // field basis between using either spatial or temporal interpolation
  900.     // depending on the amount of motion.
  901.     DXVA_DeinterlaceTech_FieldAdaptive          = 0x0020,
  902.  
  903.     // the pixels in the missing line are recreated by switching on a pixel by pixel
  904.     // basis between using either spatial or temporal interpolation depending on
  905.     // the amount of motion..
  906.     DXVA_DeinterlaceTech_PixelAdaptive          = 0x0040,
  907.  
  908.     // Motion Vector Steering  identifies objects within a sequence of video
  909.     // fields.  The missing pixels are recreated after first aligning the
  910.     // movement axes of the individual objects in the scene to make them
  911.     // parallel with the time axis.
  912.     DXVA_DeinterlaceTech_MotionVectorSteered      = 0x0080
  913.  
  914. } DXVA_DeinterlaceTech;
  915.  
  916.  
  917. typedef struct _DXVA_VideoSample {
  918.     REFERENCE_TIME      rtStart;
  919.     REFERENCE_TIME      rtEnd;
  920.     DXVA_SampleFormat   SampleFormat;   // only lower 8 bits used
  921.     VOID*               lpDDSSrcSurface;
  922. } DXVA_VideoSample, *LPDXVA_VideoSample;
  923.  
  924.  
  925.  
  926. // -------------------------------------------------------------------------
  927. // DeinterlaceBltEx declarations
  928. // -------------------------------------------------------------------------
  929. //
  930.  
  931. typedef enum _DXVA_SampleFlags {
  932.     DXVA_SampleFlagsMask = DXVABit(3)|DXVABit(2)|DXVABit(1)|DXVABit(0),
  933.  
  934.     DXVA_SampleFlag_Palette_Changed         = 0x0001,
  935.     DXVA_SampleFlag_SrcRect_Changed         = 0x0002,
  936.     DXVA_SampleFlag_DstRect_Changed         = 0x0004,
  937.     DXVA_SampleFlag_ColorData_Changed       = 0x0008,
  938. } DXVA_SampleFlags;
  939.  
  940. typedef enum _DXVA_DestinationFlags {
  941.     DXVA_DestinationFlagMask = DXVABit(3)|DXVABit(2)|DXVABit(1)|DXVABit(0),
  942.  
  943.     DXVA_DestinationFlag_Background_Changed = 0x0001,
  944.     DXVA_DestinationFlag_TargetRect_Changed = 0x0002,
  945.     DXVA_DestinationFlag_ColorData_Changed  = 0x0004,
  946.     DXVA_DestinationFlag_Alpha_Changed      = 0x0008
  947. } DXVA_DestinationFlags;
  948.  
  949.  
  950. typedef struct _DXVA_VideoSample2 {
  951.     REFERENCE_TIME      rtStart;
  952.     REFERENCE_TIME      rtEnd;
  953.     DWORD               SampleFormat;   // cast to DXVA_ExtendedFormat, or use Extract macros
  954.     DWORD               SampleFlags;
  955.     VOID*               lpDDSSrcSurface;
  956.     RECT                rcSrc;
  957.     RECT                rcDst;
  958.     DXVA_AYUVsample2    Palette[16];
  959. } DXVA_VideoSample2, *LPDXVA_VideoSample2;
  960.  
  961. typedef struct _DXVA_DeinterlaceCaps {
  962.     DWORD                   Size;
  963.     DWORD                   NumPreviousOutputFrames;
  964.     DWORD                   InputPool;
  965.     DWORD                   NumForwardRefSamples;
  966.     DWORD                   NumBackwardRefSamples;
  967.     D3DFORMAT               d3dOutputFormat;
  968.     DXVA_VideoProcessCaps   VideoProcessingCaps;
  969.     DXVA_DeinterlaceTech    DeinterlaceTechnology;
  970. } DXVA_DeinterlaceCaps, *LPDXVA_DeinterlaceCaps;
  971.  
  972.  
  973.  
  974.  
  975. // -------------------------------------------------------------------------
  976. // Data types used with RenderMoComp in kernel mode
  977. // -------------------------------------------------------------------------
  978. //
  979.  
  980. // Function codes for RenderMoComp
  981.  
  982. #define MAX_DEINTERLACE_SURFACES                        32
  983.  
  984. typedef struct _DXVA_DeinterlaceBlt {
  985.     DWORD               Size;
  986.     DWORD               Reserved;
  987.     REFERENCE_TIME      rtTarget;
  988.     RECT                DstRect;
  989.     RECT                SrcRect;
  990.     DWORD               NumSourceSurfaces;
  991.     FLOAT               Alpha;
  992.     DXVA_VideoSample    Source[MAX_DEINTERLACE_SURFACES];
  993. } DXVA_DeinterlaceBlt;
  994.  
  995. #define DXVA_DeinterlaceBltFnCode                     0x01
  996. // lpInput => DXVA_DeinterlaceBlt*
  997. // lpOuput => NULL /* not currently used */
  998.  
  999.  
  1000. typedef struct _DXVA_DeinterlaceBltEx {
  1001.     DWORD               Size;
  1002.     DXVA_AYUVsample2    BackgroundColor;
  1003.     RECT                rcTarget;
  1004.     REFERENCE_TIME      rtTarget;
  1005.     DWORD               NumSourceSurfaces;
  1006.     FLOAT               Alpha;
  1007.     DXVA_VideoSample2   Source[MAX_DEINTERLACE_SURFACES];
  1008.     DWORD               DestinationFormat;
  1009.     DWORD               DestinationFlags;
  1010. } DXVA_DeinterlaceBltEx;
  1011.  
  1012. #define DXVA_DeinterlaceBltExFnCode                   0x02
  1013. // lpInput => DXVA_DeinterlaceBltEx*
  1014. // lpOuput => NULL /* not currently used */
  1015.  
  1016.  
  1017. #define MAX_DEINTERLACE_DEVICE_GUIDS                    32
  1018. typedef struct _DXVA_DeinterlaceQueryAvailableModes {
  1019.     DWORD               Size;
  1020.     DWORD               NumGuids;
  1021.     GUID                Guids[MAX_DEINTERLACE_DEVICE_GUIDS];
  1022. } DXVA_DeinterlaceQueryAvailableModes;
  1023.  
  1024. #define DXVA_DeinterlaceQueryAvailableModesFnCode     0x01
  1025. // lpInput => DXVA_VideoDesc*
  1026. // lpOuput => DXVA_DeinterlaceQueryAvailableModes*
  1027.  
  1028.  
  1029. typedef struct _DXVA_DeinterlaceQueryModeCaps {
  1030.     DWORD               Size;
  1031.     GUID                Guid;
  1032.     DXVA_VideoDesc      VideoDesc;
  1033. } DXVA_DeinterlaceQueryModeCaps;
  1034.  
  1035. #define DXVA_DeinterlaceQueryModeCapsFnCode           0x02
  1036. // lpInput => DXVA_DeinterlaceQueryModeCaps*
  1037. // lpOuput => DXVA_DeinterlaceCaps*
  1038.  
  1039. #endif /*  __DIRECTX_VA_DEINTERLACE__ */
  1040.  
  1041.  
  1042. // -------------------------------------------------------------------------
  1043. //
  1044. // The definitions that follow describe the video ProcAmp interface
  1045. // between the VMR and the graphics device driver.  This interface is not
  1046. // accessable via the IAMVideoAccelerator interface.
  1047. //
  1048. // -------------------------------------------------------------------------
  1049. //
  1050. #ifndef __DIRECTX_VA_PROCAMPCONTROL__
  1051. #define __DIRECTX_VA_PROCAMPCONTROL__
  1052.  
  1053. DEFINE_GUID(DXVA_ProcAmpControlDevice,
  1054.     0x9f200913,0x2ffd,0x4056,0x9f,0x1e,0xe1,0xb5,0x08,0xf2,0x2d,0xcf);
  1055.  
  1056. typedef enum _DXVA_ProcAmpControlProp {
  1057.     DXVA_ProcAmp_None       = 0x0000,
  1058.     DXVA_ProcAmp_Brightness = 0x0001,
  1059.     DXVA_ProcAmp_Contrast   = 0x0002,
  1060.     DXVA_ProcAmp_Hue        = 0x0004,
  1061.     DXVA_ProcAmp_Saturation = 0x0008
  1062. } DXVA_ProcAmpControlProp;
  1063.  
  1064.  
  1065. typedef struct _DXVA_ProcAmpControlCaps {
  1066.     DWORD                   Size;
  1067.     DWORD                   InputPool;
  1068.     D3DFORMAT               d3dOutputFormat;
  1069.     DWORD                   ProcAmpControlProps;// see DXVA_ProcAmpControlProp
  1070.     DWORD                   VideoProcessingCaps;// see DXVA_VideoProcessCaps
  1071. } DXVA_ProcAmpControlCaps, *LPDXVA_ProcAmpControlCaps;
  1072.  
  1073. #define DXVA_ProcAmpControlQueryCapsFnCode             0x03
  1074. // lpInput => DXVA_VideoDesc*
  1075. // lpOuput => DXVA_ProcAmpControlCaps*
  1076.  
  1077.  
  1078. typedef struct _DXVA_ProcAmpControlQueryRange {
  1079.     DWORD                   Size;
  1080.     DXVA_ProcAmpControlProp ProcAmpControlProp;
  1081.     DXVA_VideoDesc          VideoDesc;
  1082. } DXVA_ProcAmpControlQueryRange, *LPDXVA_ProcAmpControlQueryRange;
  1083.  
  1084. typedef struct _DXVA_VideoPropertyRange {
  1085.     FLOAT   MinValue;
  1086.     FLOAT   MaxValue;
  1087.     FLOAT   DefaultValue;
  1088.     FLOAT   StepSize;
  1089. } DXVA_VideoPropertyRange, *LPDXVA_VideoPropertyRange;
  1090.  
  1091. #define DXVA_ProcAmpControlQueryRangeFnCode            0x04
  1092. // lpInput => DXVA_ProcAmpControlQueryRange*
  1093. // lpOuput => DXVA_VideoPropertyRange*
  1094.  
  1095.  
  1096. typedef struct _DXVA_ProcAmpControlBlt {
  1097.     DWORD               Size;
  1098.     RECT                DstRect;
  1099.     RECT                SrcRect;
  1100.     FLOAT               Alpha;
  1101.     FLOAT               Brightness;
  1102.     FLOAT               Contrast;
  1103.     FLOAT               Hue;
  1104.     FLOAT               Saturation;
  1105. } DXVA_ProcAmpControlBlt;
  1106.  
  1107. #define DXVA_ProcAmpControlBltFnCode                   0x01
  1108. // lpInput => DXVA_ProcAmpControlBlt*
  1109. // lpOuput => NULL /* not currently used */
  1110.  
  1111. #endif /*  __DIRECTX_VA_PROCAMPCONTROL__ */
  1112.  
  1113.  
  1114. // -------------------------------------------------------------------------
  1115. //
  1116. // The definitions that follow describe the Certified Output Protection
  1117. // Protocol between the VMR and the graphics device driver.  This interface
  1118. // is not accessable via the IAMVideoAccelerator interface.
  1119. //
  1120. // -------------------------------------------------------------------------
  1121. //
  1122.  
  1123. #ifndef __DIRECTX_VA_CERTOUTPUTPROTECT__
  1124. #define __DIRECTX_VA_CERTOUTPUTPROTECT__
  1125.  
  1126.  
  1127. DEFINE_GUID(DXVA_COPPDevice,
  1128.     0xd2457add,0x8999,0x45ed,0x8a,0x8a,0xd1,0xaa,0x04,0x7b,0xa4,0xd5);
  1129.  
  1130.  
  1131. // -------------------------------------------------------------------------
  1132. // COPPGetCertificateLength
  1133. // -------------------------------------------------------------------------
  1134. #define DXVA_COPPGetCertificateLengthFnCode         0x01
  1135. // lpInput => NULL
  1136. // lpOuput => DWORD*
  1137.  
  1138.  
  1139. // -------------------------------------------------------------------------
  1140. // COPPKeyExchange
  1141. // -------------------------------------------------------------------------
  1142. #define DXVA_COPPKeyExchangeFnCode                  0x02
  1143. // lpInputData => NULL
  1144. // lpOuputData => GUID*
  1145.  
  1146.  
  1147. // -------------------------------------------------------------------------
  1148. // COPPSequenceStart
  1149. // -------------------------------------------------------------------------
  1150. typedef struct _DXVA_COPPSignature {
  1151.     UCHAR   Signature[256];
  1152. } DXVA_COPPSignature, *LPDXVA_COPPSignature;
  1153.  
  1154. #define DXVA_COPPSequenceStartFnCode                0x03
  1155. // lpInputData => DXVA_COPPSignature*
  1156. // lpOuputData => NULL
  1157.  
  1158.  
  1159.  
  1160. // -------------------------------------------------------------------------
  1161. // COPPCommand
  1162. // -------------------------------------------------------------------------
  1163. typedef struct _DXVA_COPPCommand {
  1164.     GUID    macKDI;             //   16 bytes
  1165.     GUID    guidCommandID;      //   16 bytes
  1166.     ULONG   dwSequence;         //    4 bytes
  1167.     ULONG   cbSizeData;         //    4 bytes
  1168.     UCHAR   CommandData[4056];  // 4056 bytes (4056+4+4+16+16 = 4096)
  1169. }  DXVA_COPPCommand, *LPDXVA_COPPCommand;
  1170.  
  1171. #define DXVA_COPPCommandFnCode                      0x04
  1172. // lpInputData => DXVA_COPPCommand*
  1173. // lpOuputData => NULL
  1174.  
  1175.  
  1176. DEFINE_GUID(DXVA_COPPSetProtectionLevel,
  1177.     0x9bb9327c,0x4eb5,0x4727,0x9f,0x00,0xb4,0x2b,0x09,0x19,0xc0,0xda);
  1178.  
  1179. typedef struct _DXVA_COPPSetProtectionLevelCmdData {
  1180.     ULONG   ProtType;
  1181.     ULONG   ProtLevel;
  1182.     ULONG   ExtendedInfoChangeMask;
  1183.     ULONG   ExtendedInfoData;
  1184. } DXVA_COPPSetProtectionLevelCmdData;
  1185.  
  1186.  
  1187. // Set the HDCP protection level - (0 - 1 DWORD, 4 bytes)
  1188.  
  1189. typedef enum _COPP_HDCP_Protection_Level {
  1190.     COPP_HDCP_Level0    = 0,
  1191.     COPP_HDCP_LevelMin  = COPP_HDCP_Level0,
  1192.     COPP_HDCP_Level1    = 1,
  1193.     COPP_HDCP_LevelMax  = COPP_HDCP_Level1,
  1194.     COPP_HDCP_ForceDWORD = 0x7fffffff
  1195. } COPP_HDCP_Protection_Level;
  1196.  
  1197. typedef enum _COPP_CGMSA_Protection_Level {
  1198.     COPP_CGMSA_Disabled = 0,
  1199.     COPP_CGMSA_LevelMin = COPP_CGMSA_Disabled,
  1200.     COPP_CGMSA_CopyFreely = 1,
  1201.     COPP_CGMSA_CopyNoMore = 2,
  1202.     COPP_CGMSA_CopyOneGeneration   = 3,
  1203.     COPP_CGMSA_CopyNever = 4,
  1204.     COPP_CGMSA_RedistributionControlRequired = 0x08,
  1205.     COPP_CGMSA_LevelMax = (COPP_CGMSA_RedistributionControlRequired + COPP_CGMSA_CopyNever),
  1206.     COPP_CGMSA_ForceDWORD = 0x7fffffff
  1207. } COPP_CGMSA_Protection_Level;
  1208.  
  1209. typedef enum _COPP_ACP_Protection_Level {
  1210.     COPP_ACP_Level0     = 0,
  1211.     COPP_ACP_LevelMin   = COPP_ACP_Level0,
  1212.     COPP_ACP_Level1     = 1,
  1213.     COPP_ACP_Level2     = 2,
  1214.     COPP_ACP_Level3     = 3,
  1215.     COPP_ACP_LevelMax   = COPP_ACP_Level3,
  1216.     COPP_ACP_ForceDWORD = 0x7fffffff
  1217. } COPP_ACP_Protection_Level;
  1218.  
  1219. #define COPP_NoProtectionLevelAvailable  -1
  1220. #define COPP_DefaultProtectionLevel 0
  1221.  
  1222.  
  1223. //
  1224. // Bit flags of possible protection types.  Note that it is possible to apply
  1225. // different protection settings to a single connector.
  1226. //
  1227. enum {
  1228.     COPP_ProtectionType_Unknown      = 0x80000000,
  1229.     COPP_ProtectionType_None         = 0x00000000,
  1230.     COPP_ProtectionType_HDCP         = 0x00000001,     
  1231.     COPP_ProtectionType_ACP          = 0x00000002,
  1232.     COPP_ProtectionType_CGMSA        = 0x00000004,
  1233.     COPP_ProtectionType_Mask         = 0x80000007,
  1234.     COPP_ProtectionType_Reserved     = 0x7FFFFFF8
  1235. };
  1236.  
  1237. DEFINE_GUID(DXVA_COPPSetSignaling,
  1238.     0x9a631a5, 0xd684, 0x4c60, 0x8e, 0x4d, 0xd3, 0xbb, 0xf, 0xb, 0xe3, 0xee);
  1239.  
  1240. typedef struct _DXVA_COPPSetSignalingCmdData {
  1241.     ULONG   ActiveTVProtectionStandard;           // See COPP_TVProtectionStandard
  1242.     ULONG   AspectRatioChangeMask1;
  1243.     ULONG   AspectRatioData1;                     // See COPP_ImageAspectRatio_EN300294 for ETSI EN 300 294 values
  1244.     ULONG   AspectRatioChangeMask2;
  1245.     ULONG   AspectRatioData2;
  1246.     ULONG   AspectRatioChangeMask3;
  1247.     ULONG   AspectRatioData3;
  1248.     ULONG   ExtendedInfoChangeMask[4];
  1249.     ULONG   ExtendedInfoData[4];
  1250.     ULONG   Reserved;
  1251. } DXVA_COPPSetSignalingCmdData;
  1252.  
  1253. // Add format enum and data enum
  1254. typedef enum _COPP_TVProtectionStandard {
  1255.     COPP_ProtectionStandard_Unknown                         = 0x80000000,
  1256.     COPP_ProtectionStandard_None                            = 0x00000000,
  1257.     COPP_ProtectionStandard_IEC61880_525i                   = 0x00000001,
  1258.     COPP_ProtectionStandard_IEC61880_2_525i                 = 0x00000002,
  1259.     COPP_ProtectionStandard_IEC62375_625p                   = 0x00000004,
  1260.     COPP_ProtectionStandard_EIA608B_525                     = 0x00000008,
  1261.     COPP_ProtectionStandard_EN300294_625i                   = 0x00000010,
  1262.     COPP_ProtectionStandard_CEA805A_TypeA_525p              = 0x00000020,
  1263.     COPP_ProtectionStandard_CEA805A_TypeA_750p              = 0x00000040,
  1264.     COPP_ProtectionStandard_CEA805A_TypeA_1125i             = 0x00000080,
  1265.     COPP_ProtectionStandard_CEA805A_TypeB_525p              = 0x00000100,
  1266.     COPP_ProtectionStandard_CEA805A_TypeB_750p              = 0x00000200,
  1267.     COPP_ProtectionStandard_CEA805A_TypeB_1125i             = 0x00000400,
  1268.     COPP_ProtectionStandard_ARIBTRB15_525i                  = 0x00000800,
  1269.     COPP_ProtectionStandard_ARIBTRB15_525p                  = 0x00001000,
  1270.     COPP_ProtectionStandard_ARIBTRB15_750p                  = 0x00002000,
  1271.     COPP_ProtectionStandard_ARIBTRB15_1125i                 = 0x00004000,
  1272.     COPP_ProtectionStandard_Mask                            = 0x80007FFF,
  1273.     COPP_ProtectionStandard_Reserved                        = 0x7FFF8000
  1274. } COPP_TVProtectionStandard;
  1275.  
  1276. #define COPP_ImageAspectRatio_EN300294_Mask                 0x00000007
  1277.  
  1278. typedef enum _COPP_ImageAspectRatio_EN300294 {
  1279.     COPP_AspectRatio_EN300294_FullFormat4by3                = 0,
  1280.     COPP_AspectRatio_EN300294_Box14by9Center                = 1,
  1281.     COPP_AspectRatio_EN300294_Box14by9Top                   = 2,
  1282.     COPP_AspectRatio_EN300294_Box16by9Center                = 3,
  1283.     COPP_AspectRatio_EN300294_Box16by9Top                   = 4,
  1284.     COPP_AspectRatio_EN300294_BoxGT16by9Center              = 5,
  1285.     COPP_AspectRatio_EN300294_FullFormat4by3ProtectedCenter = 6,
  1286.     COPP_AspectRatio_EN300294_FullFormat16by9Anamorphic     = 7,
  1287.     COPP_AspectRatio_ForceDWORD                             = 0x7fffffff
  1288. } COPP_ImageAspectRatio_EN300294;
  1289.  
  1290.  
  1291. // -------------------------------------------------------------------------
  1292. // COPPQueryStatus
  1293. // -------------------------------------------------------------------------
  1294. typedef struct _DXVA_COPPStatusInput {
  1295.     GUID    rApp;               //   16 bytes
  1296.     GUID    guidStatusRequestID;//   16 bytes
  1297.     ULONG   dwSequence;         //    4 bytes
  1298.     ULONG   cbSizeData;         //    4 bytes
  1299.     UCHAR   StatusData[4056];   // 4056 bytes (4056+4+4+16+16 = 4096)
  1300. } DXVA_COPPStatusInput, *LPDXVA_COPPStatusInput;
  1301.  
  1302. typedef struct _DXVA_COPPStatusOutput {
  1303.     GUID    macKDI;             //   16 bytes
  1304.     ULONG   cbSizeData;         //    4 bytes
  1305.     UCHAR   COPPStatus[4076];   // 4076 bytes (4076+16+4 = 4096)
  1306. } DXVA_COPPStatusOutput, *LPDXVA_COPPStatusOutput;
  1307.  
  1308. typedef enum _COPP_StatusFlags {
  1309.     COPP_StatusNormal           = 0x00,
  1310.     COPP_LinkLost               = 0x01,
  1311.     COPP_RenegotiationRequired  = 0x02,
  1312.     COPP_StatusFlagsReserved    = 0xFFFFFFFC
  1313. } COPP_StatusFlags;
  1314.  
  1315. typedef struct _DXVA_COPPStatusData {
  1316.     GUID    rApp;
  1317.     ULONG   dwFlags;    // See COPP_StatusFlags above
  1318.     ULONG   dwData;
  1319.     ULONG   ExtendedInfoValidMask;
  1320.     ULONG   ExtendedInfoData;
  1321. } DXVA_COPPStatusData;
  1322.  
  1323. typedef struct _DXVA_COPPStatusDisplayData {
  1324.     GUID    rApp;
  1325.     ULONG   dwFlags;    // See COPP_StatusFlags above
  1326.     ULONG   DisplayWidth;
  1327.     ULONG   DisplayHeight;
  1328.     ULONG   Format;     // also contains extended color data
  1329.     ULONG   d3dFormat;
  1330.     ULONG   FreqNumerator;
  1331.     ULONG   FreqDenominator;
  1332. } DXVA_COPPStatusDisplayData;
  1333.  
  1334. typedef enum _COPP_StatusHDCPFlags {
  1335.     COPP_HDCPRepeater       = 0x01,
  1336.     COPP_HDCPFlagsReserved  = 0xFFFFFFFE
  1337. } COPP_StatusHDCPFlags;
  1338.  
  1339. typedef struct _DXVA_COPPStatusHDCPKeyData {
  1340.     GUID    rApp;
  1341.     ULONG   dwFlags;        // See COPP_StatusFlags above
  1342.     ULONG   dwHDCPFlags;    // See COPP_StatusHDCPFlags above
  1343.     GUID    BKey;           // Lower 40 bits
  1344.     GUID    Reserved1;
  1345.     GUID    Reserved2;
  1346. } DXVA_COPPStatusHDCPKeyData;
  1347.  
  1348.  
  1349. #define DXVA_COPPQueryStatusFnCode 0x05
  1350. // lpInputData => DXVA_COPPStatusInput*
  1351. // lpOuputData => DXVA_COPPStatusOutput*
  1352.  
  1353.  
  1354. //
  1355. // Status GUID and enumerations
  1356. //
  1357. DEFINE_GUID(DXVA_COPPQueryConnectorType,
  1358.       0x81d0bfd5,0x6afe,0x48c2,0x99,0xc0,0x95,0xa0,0x8f,0x97,0xc5,0xda);
  1359.  
  1360. typedef enum _COPP_ConnectorType {
  1361.     COPP_ConnectorType_Unknown = -1,
  1362.     COPP_ConnectorType_VGA = 0,
  1363.     COPP_ConnectorType_SVideo = 1,
  1364.     COPP_ConnectorType_CompositeVideo = 2,
  1365.     COPP_ConnectorType_ComponentVideo = 3,
  1366.     COPP_ConnectorType_DVI = 4,
  1367.     COPP_ConnectorType_HDMI = 5,
  1368.     COPP_ConnectorType_LVDS = 6,
  1369.     COPP_ConnectorType_TMDS = 7,
  1370.     COPP_ConnectorType_D_JPN = 8,
  1371.     COPP_ConnectorType_Internal = 0x80000000,   // can be combined with the other connector types
  1372.     COPP_ConnectorType_ForceDWORD = 0x7fffffff  /* force 32-bit size enum */
  1373. } COPP_ConnectorType;
  1374.  
  1375. DEFINE_GUID(DXVA_COPPQueryProtectionType,
  1376.     0x38f2a801,0x9a6c,0x48bb,0x91,0x07,0xb6,0x69,0x6e,0x6f,0x17,0x97);
  1377.  
  1378. DEFINE_GUID(DXVA_COPPQueryLocalProtectionLevel,
  1379.     0xb2075857,0x3eda,0x4d5d,0x88,0xdb,0x74,0x8f,0x8c,0x1a,0x05,0x49);
  1380.  
  1381. DEFINE_GUID(DXVA_COPPQueryGlobalProtectionLevel,
  1382.     0x1957210a,0x7766,0x452a,0xb9,0x9a,0xd2,0x7a,0xed,0x54,0xf0,0x3a);
  1383.  
  1384. DEFINE_GUID(DXVA_COPPQueryDisplayData,
  1385.     0xd7bf1ba3,0xad13,0x4f8e,0xaf,0x98,0x0d,0xcb,0x3c,0xa2,0x04,0xcc);
  1386.  
  1387. DEFINE_GUID(DXVA_COPPQueryHDCPKeyData,
  1388.     0xdb59d74, 0xa992, 0x492e, 0xa0, 0xbd, 0xc2, 0x3f, 0xda, 0x56, 0x4e, 0x0);
  1389.  
  1390. DEFINE_GUID(DXVA_COPPQueryBusData,
  1391.     0xc6f4d673, 0x6174, 0x4184, 0x8e, 0x35, 0xf6, 0xdb, 0x52, 0x0, 0xbc, 0xba);
  1392.  
  1393. typedef enum _COPP_BusType {
  1394.     COPP_BusType_Unknown    = 0,
  1395.     COPP_BusType_PCI        = 1,
  1396.     COPP_BusType_PCIX       = 2,
  1397.     COPP_BusType_PCIExpress = 3,
  1398.     COPP_BusType_AGP        = 4,
  1399.     COPP_BusType_Integrated = 0x80000000, // can be combined with the other bus types
  1400.     COPP_BusType_ForceDWORD = 0x7fffffff  /* force 32-bit size enum */
  1401. } COPP_BusType;
  1402.  
  1403. DEFINE_GUID(DXVA_COPPQuerySignaling,
  1404.     0x6629a591, 0x3b79, 0x4cf3, 0x92, 0x4a, 0x11, 0xe8, 0xe7, 0x81, 0x16, 0x71);
  1405.  
  1406. typedef struct _DXVA_COPPStatusSignalingCmdData {
  1407.     GUID    rApp;
  1408.     ULONG   dwFlags;                                // See COPP_StatusFlags above
  1409.     ULONG   AvailableTVProtectionStandards;         // See COPP_TVProtectionStandard
  1410.     ULONG   ActiveTVProtectionStandard;             // See COPP_TVProtectionStandard
  1411.     ULONG   TVType;
  1412.     ULONG   AspectRatioValidMask1;
  1413.     ULONG   AspectRatioData1;                       // See COPP_AspectRatio_EN300294 for ETSI EN 300 294 values
  1414.     ULONG   AspectRatioValidMask2;
  1415.     ULONG   AspectRatioData2;
  1416.     ULONG   AspectRatioValidMask3;
  1417.     ULONG   AspectRatioData3;
  1418.     ULONG   ExtendedInfoValidMask[4];
  1419.     ULONG   ExtendedInfoData[4];
  1420. } DXVA_COPPStatusSignalingCmdData;
  1421.  
  1422.  
  1423. #endif /* __DIRECTX_VA_CERTOUTPUTPROTECT__ */
  1424.  
  1425. #ifdef __cplusplus
  1426. }
  1427. #endif
  1428.  
  1429. #endif /* __DIRECTX_VA__ */
  1430.